package com.openlogic.common.logic.node.enums;

import com.openlogic.common.logic.node.parse.node.AreaNodeParaseHandler;
import com.openlogic.common.logic.node.parse.node.BaseSubNodeParseHandler;
import com.openlogic.common.logic.node.parse.node.CrossMatrixNodeParaseHandler;
import com.openlogic.common.logic.node.parse.node.OtherNodeParaseHandler;
import com.openlogic.common.logic.node.parse.node.RulesNodeParaseHandler;
import com.openlogic.common.logic.node.parse.node.ScoreCardNodeParaseHandler;
import com.openlogic.common.logic.node.parse.node.SwitchNodeParaseHandler;

/**
* @ClassName: NodeTypeEnums
* @Description: 节点解析策略枚举管理
* @author weiyongpeng
* @date 2024年7月14日 下午12:10:36
 */
public enum NodeTypeEnums {
	
	OTHER_NODE("other_node"){
		public BaseSubNodeParseHandler getNodeParse() {
			return new OtherNodeParaseHandler();
		}
	},
	SWITCH_NODE("switch"){ // 分支块
		public BaseSubNodeParseHandler getNodeParse() {
			return new SwitchNodeParaseHandler();
		}
	},
	AREA_NODE("area"){ // 循环域
		public BaseSubNodeParseHandler getNodeParse() {
			return new AreaNodeParaseHandler();
		}
	},
	SCORECARD_NODE("scoreCard"){ // 评分卡
		public BaseSubNodeParseHandler getNodeParse() {
			return new ScoreCardNodeParaseHandler();
		}
	},
	CMATR_NODE("cMatr"){ // 交叉矩阵
		public BaseSubNodeParseHandler getNodeParse() {
			return new CrossMatrixNodeParaseHandler();
		}
	},
	RULES_NODE("rules"){ // 规则块
		public BaseSubNodeParseHandler getNodeParse() {
			return new RulesNodeParaseHandler();
		}
	};
	
	private String nodetype;
	
	
	private NodeTypeEnums(String nodetype) {
		this.nodetype = nodetype;
	}

	private NodeTypeEnums() {
	}

	public String getNodetype() {
		return nodetype;
	}

	public void setNodetype(String nodetype) {
		this.nodetype = nodetype;
	}

	public abstract BaseSubNodeParseHandler getNodeParse();
	
	public static BaseSubNodeParseHandler getNodeParseByType(String nodeType){
		NodeTypeEnums[] values = NodeTypeEnums.values();
		for (NodeTypeEnums nodeTypeEnums : values) {
			if (nodeTypeEnums.getNodetype().equals(nodeType)) {
				return nodeTypeEnums.getNodeParse();
			}
		}
		return NodeTypeEnums.OTHER_NODE.getNodeParse();
	}
}

